package com.xpw.viewdemo.view

import android.content.Context
import android.graphics.Canvas
import android.graphics.Paint
import android.graphics.Path
import android.graphics.PathMeasure
import android.util.AttributeSet
import android.view.View

val RADIUS = 100f.px

class TestView(context: Context?, attrs: AttributeSet?) : View(context, attrs) {
    private val paint = Paint(Paint.ANTI_ALIAS_FLAG)//抗锯齿
    private val path=Path()
    lateinit var pathMeasure: PathMeasure
    override fun onSizeChanged(w: Int, h: Int, oldw: Int, oldh: Int) {
        super.onSizeChanged(w, h, oldw, oldh)
        path.reset()
        path.addCircle(width / 2f, height / 2f, RADIUS, Path.Direction.CW)
        //cw 顺时针  ccw逆时针
        path.addRect(width / 2f-RADIUS,height / 2f,width / 2f+RADIUS,height / 2f+RADIUS*2,Path.Direction.CCW)
        //第二个参数为是否自动闭合
        pathMeasure= PathMeasure(path,false);
        pathMeasure.length//获取路径长度
        pathMeasure.getPosTan(100f,null,null)//获取正切值
        //FillType.EVEN_ODD  跟方向没关系
        // 镂空 规则
        // 1、从该点引出一条假想线到外层区域。
        //2、计算从该点出发所穿过的边界数量。
        //3、如果穿过数量为奇数，表示被填充，偶数则被镂空。
        // 默认为WINDING规则  跟方向有关系
        // 1、从该点引出一条假想线到外层区域，如图中红线。
        //2、计算从该点出发所穿过的边界，如果遇到顺时针，则+1，逆时针，则-1。
        //3、计算的结果，如果为0，则表示该点被镂空，否则该点被填充颜色。
        path.fillType=Path.FillType.EVEN_ODD
    }
    override fun onDraw(canvas: Canvas) {
        super.onDraw(canvas)
//        canvas.drawLine(100f, 100f, 150f, 150f, paint);
//        //TypedValue.applyDimension  转为dp
//        canvas.drawCircle(width / 2f, height / 2f, RADIUS, paint);
        canvas.drawPath(path,paint)
    }
}